m进制数转十进制数和十进制数转m进制数(m小于等于16)

m进制数转十进制数(乘权取余法)

#include<iostream>
#include<cmath>
using namespace std;
int main(){
	int n,m;
	int ans=0;
	cin>>n>>m;
	for(int i=6;i>=0;i--){
		int a=n/pow(10,i);   //1式
		int b=n/pow(10,i+1);  //2式
		int c=pow(m,i);      // 3式
		ans+=(a-b*10)*c;         //4式
	}
	cout<<ans<<endl;
	return 0;	
}

1~4式主要是为了单步调试方便,可以写成一步。
但这只对于10进制以内的数转为十进制数有作用。比如16进制中单位存在A~F用int型则不能准确表示了。
为适应更高数制,修正后的代码如下(当然为了题目要求这里最高数制可以转换到16进制数):

#include<iostream>
#include<cmath>
#include<string>
using namespace std;
int main(){
	string n;
	int m;
	int ans=0;
	cin>>n>>m;
	int q=n.size();
	for(int i=0;i<q;i++){
		if(n[i]<=57&&n[i]>=48)
			ans+=(n[i]-48)*pow(m,q-i-1);
		if(n[i]<=70&&n[i]>=65)
			ans+=(n[i]-55)*pow(m,q-i-1);
		if(n[i]<=102&&n[i]>=97)
			ans+=(n[i]-87)*pow(m,q-i-1);
	}
	cout<<ans<<endl;
	return 0;	
}

十进制数转m进制数(反向取余法)

#include<iostream>
#include<cmath>
#include<string>
using namespace std;
int main(){
	int n,m;
	cin>>n>>m;
	char num[100];
	int res=n,i=0,cnt,p;
	while(res!=0){
		res=n/m;
		p=n%m;
		if(p==10)num[i++]='A';
		else if(p==11)num[i++]='B';
		else if(p==12)num[i++]='C';
		else if(p==13)num[i++]='D';
		else if(p==14)num[i++]='E';
		else if(p==15)num[i++]='F';
		else num[i++]=p+48;
		n=res;
	}
	cnt=i;
	for(i=cnt-1;i>=0;i--)
		cout<<num[i];
	cout<<endl;
	return 0;	
}
#include using namespace std; int main() { cout<<"06209527 朱**的作业!"<<endl; char arr[33],arr1[50]; //组arr用来保存用户输入的整形 int b=0; int base; //base用来保存用户欲转换的进制 int len; //衡量arr的长度 double sum=0,a=0; //sum是用户输入的浮点大小 cout<<"请输入一个浮点型整的小部分"<>arr; len=strlen(arr); for(int i=0;i<len;i++) { a=arr[i]-'0'; for(int j=-1;j<i;j++) a=a/10; sum+=a; } cout<<"您输入的浮点型小是:"<<sum<<endl; cout<<"请输入你要转换的进制(大于0,小于36!)"<>base; if(base36) { cout<<"输入错误!请重新输入!"<<endl; } int n=0; while(sum!=0&&n0) sum=sum-b; n++; } cout<<"转换后的小为:"<<endl; cout<<"0."; arr1[n]=0; len=strlen(arr1); for(i=0;i57) //9的ASCII码为57 { switch(arr1[i]) { case 58:cout<<"A";break; case 59:cout<<"B";break; case 60:cout<<"C";break; case 61:cout<<"D";break; case 62:cout<<"E";break; case 63:cout<<"F";break; case 64:cout<<"G";break; case 65:cout<<"H";break; case 66:cout<<"I";break; case 67:cout<<"J";break; case 68:cout<<"K";break; case 69:cout<<"L";break; case 70:cout<<"M";break; case 71:cout<<"N";break; case 72:cout<<"O";break; case 73:cout<<"P";break; case 74:cout<<"Q";break; case 75:cout<<"R";break; case 76:cout<<"S";break; case 77:cout<<"T";break; case 78:cout<<"U";break; case 79:cout<<"V";break; case 80:cout<<"W";break; case 81:cout<<"X";break; case 82:cout<<"Y";break; case 83:cout<<"Z";break; } } else cout<<arr1[i]; } return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值